package main

import (
	"database/sql"
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Student struct {
	Id   int16
	Name string
}

//连接数据库的url : "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
//初次使用MySQL数据
func main() {
	//连接方式1：
	dsn1 := "root:root@tcp(127.0.0.1:3306)/userdb?charset=utf8mb4&parseTime=True&loc=Local"
	gormDB1, err := gorm.Open(mysql.Open(dsn1), &gorm.Config{})
	if err != nil {
		fmt.Println("gorm.Open Error :", err)
	}
	fmt.Println("hello World~")
	currentDBName := gormDB1.Migrator().CurrentDatabase()
	fmt.Println("当前操作的数据库名：", currentDBName)

	//
	//
	//连接方式2：
	db, _ := gorm.Open(mysql.New(mysql.Config{
		DSN:                       "root:root@tcp(127.0.0.1:3306)/userdb?charset=utf8&parseTime=True&loc=Local", // DSN data source name
		DefaultStringSize:         256,                                                                          // string 类型字段的默认长度
		DisableDatetimePrecision:  true,                                                                         // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,                                                                         // 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,                                                                         // 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false,                                                                        // 根据当前 MySQL 版本自动配置
	}), &gorm.Config{})
	//创建数据表
	err = db.Migrator().CreateTable(&Student{})
	if err != nil {
		fmt.Printf("创建数据表失败，错误如下：%s\n", err.Error())
		return
	}
	fmt.Println("创建数据表成功~")
	//
	//
	//连接方式3：
	var sqlDB *sql.DB
	dsn2 := "root:root@tcp(127.0.0.1:3306)/userdb?charset=utf8mb4&parseTime=True&loc=Local"
	if sqlDB == nil {
		sqlDB, _ = sql.Open("mysql", dsn2)
	}
	gormDB2, _ := gorm.Open(
		mysql.New(
			mysql.Config{
				Conn: sqlDB,
			},
		),
		&gorm.Config{
			SkipDefaultTransaction: true, // 关闭写入操作默认启用事务
			DisableAutomaticPing:   true, // 关闭自动 Ping 数据库
		},
	)
	isExistField := gormDB2.Migrator().HasColumn(&Student{}, "name")
	fmt.Printf("字段是否存在:%t\n", isExistField)
}
